/**
 * 
 */
package com.proyecto.personas.modelo.servicio;

import java.util.List;

import com.proyecto.core.modelo.excepciones.GeneralException;
import com.proyecto.core.modelo.servicio.ServicioGenerico;
import com.proyecto.personas.modelo.dto.CorrelativosPersCodNip;
import com.proyecto.personas.modelo.dto.CorrelativosPersCodNipId;

/**
 * @author VICTOR GARNICA
 *
 */
public class ServicioCorrelativosPersonasCodNip extends ServicioGenerico {

	/**
	 * 
	 */

	public String obtenerProximoNumeroComoString(CorrelativosPersCodNipId correlativosPersCodNipId, boolean iniciaTransaccion)  throws GeneralException{
		String correlativoString = "";
		CorrelativosPersCodNip correlativoPersCodNip = null;
		
		correlativoPersCodNip = (CorrelativosPersCodNip)super.consultar(correlativosPersCodNipId);
		if (correlativoPersCodNip.getSecuenciaentero() == null){
			correlativoPersCodNip.setSecuenciaentero(0L);
		}
		
		correlativoPersCodNip.setSecuenciaentero(correlativoPersCodNip.getSecuenciaentero() + 1L);
		modificar(correlativoPersCodNip, iniciaTransaccion);
		if (correlativoPersCodNip.getPrefijo()!= null){
			correlativoString = correlativoPersCodNip.getPrefijo(); 
		}

		correlativoString = correlativoString + super.numeroString(correlativoPersCodNip.getSecuenciaentero(), 
																	correlativoPersCodNip.getCorrelativoformato());
		if (correlativoPersCodNip.getSufijo()!= null){
			correlativoString = correlativoString + correlativoPersCodNip.getSufijo(); 
		}
		
		return correlativoString;
	}

	public String obtenerProximoNumeroComoStringSegunCodNip(String ciaopr, String codigoPerCodNip)  throws GeneralException{
		String queryString = "from CorrelativosPersCodNip cpcn where cpcn.id.ciaopr = '"+ciaopr+"' " +
		"and cpcn.id.tabla='PERSONAS' " +
		"and cpcn.id.codigo = '"+codigoPerCodNip+"' ";
		/*
		+
		"and cpcn.secuenciaentero = (select max(cpcn1.secuenciaentero) " +
			"from CorrelativosPersCodNip cpcn1 " +
			"where cpcn1.id = cpcn.id and cpcn1.prefijo = cpcn.prefijo)";
		*/
		String correlativoString = "";
		CorrelativosPersCodNip correlativoPersCodNip = null;
		System.out.println("codigoPerCodNip::: " + codigoPerCodNip);
		try {
			List lstCorrel = propiedadDAO.ejecutarQueryConsulta(queryString, null);
			
			if(lstCorrel !=null && lstCorrel.size()>0){
				correlativoPersCodNip = (CorrelativosPersCodNip) lstCorrel.get(0);
				Long secuencia = correlativoPersCodNip.getSecuenciaentero() + 1;
				correlativoPersCodNip.setSecuenciaentero(secuencia);
				correlativoPersCodNip.setSecuenciacaracter(secuencia.toString());
				super.modificar(correlativoPersCodNip, null);
				
				if (correlativoPersCodNip.getPrefijo()!= null){
					correlativoString = correlativoPersCodNip.getPrefijo(); 
				}
				correlativoString = correlativoString + super.numeroString(correlativoPersCodNip.getSecuenciaentero(), 
																			correlativoPersCodNip.getCorrelativoformato());
				if (correlativoPersCodNip.getSufijo()!= null){
					correlativoString = correlativoString + correlativoPersCodNip.getSufijo(); 
				}
				return correlativoString;
				//return (CorrelativosPersCodNip) super.consultar(correlativoPersCodNip.getId());	
			}else{
				CorrelativosPersCodNip cfNew = new CorrelativosPersCodNip(new CorrelativosPersCodNipId(ciaopr,"PERSONAS",codigoPerCodNip));
				cfNew.setCorrelativoformato("0000");
				cfNew.setSecuenciacaracter("1");
				cfNew.setSecuenciaentero(1L);
				cfNew.setPrefijo(codigoPerCodNip);
				super.incluir(cfNew, null);
				//return (CorrelativosPersCodNip) super.consultar(cfNew.getId());
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return null;
	}
	
	public Long obtenerProximoNumeroComoEntero(CorrelativosPersCodNipId correlativosPersCodNipId, boolean iniciaTransaccion)  throws GeneralException{
		Long correlativoEntero = 0L;
		CorrelativosPersCodNip correlativoPersCodNip = null;
		
		correlativoPersCodNip = (CorrelativosPersCodNip)super.consultar(correlativosPersCodNipId);
		
		if (correlativoPersCodNip.getSecuenciaentero() == null){
			correlativoPersCodNip.setSecuenciaentero(correlativoEntero);
		}
		
		correlativoEntero = correlativoPersCodNip.getSecuenciaentero() + 1L;
		correlativoPersCodNip.setSecuenciaentero(correlativoEntero);
		super.modificar(correlativoPersCodNip, iniciaTransaccion);
		
		return correlativoEntero;
	}
	
	public CorrelativosPersCodNip obtenerCorrelativoSegunCondicionPersonaTipoNip(String ciaopr, String codigoPerCodNip){
		if (codigoPerCodNip != null){
			this.obtenerCorrelativoSegunCondicionPersonaTipoNip(ciaopr, codigoPerCodNip);
		}
		return null;
	}

	public CorrelativosPersCodNip obtenerCorrelativoSegunBusquedaPersCodNip(String ciaopr, String codigoPerCodNip){
		String queryString = "from CorrelativosPersCodNip cpcn where cpcn.id.ciaopr = '"+ciaopr+"' " +
		"and cpcn.id.tabla='PERSONAS' " +
		"and cpcn.id.codigo = '"+codigoPerCodNip+"' "+
		"and cpcn.secuenciaentero = (select max(cf1.secuenciaentero) " +
			"from CorrelativoPersCodNip cpcn1 " +
			"where cpcn1.id = cpcn.id and cpcn1.prefijo = cpcn.prefijo)";
		
		CorrelativosPersCodNip correlativoPersCodNip = null;
		
		try {
			List lstCorrel = propiedadDAO.ejecutarQueryConsulta(queryString, null);
			
			if(lstCorrel !=null && lstCorrel.size()>0){
				correlativoPersCodNip = (CorrelativosPersCodNip) lstCorrel.get(0);
				Long secuencia = correlativoPersCodNip.getSecuenciaentero() + 1;
				correlativoPersCodNip.setSecuenciaentero(secuencia);
				correlativoPersCodNip.setSecuenciacaracter(secuencia.toString());
				super.modificar(correlativoPersCodNip, null);
				return (CorrelativosPersCodNip) super.consultar(correlativoPersCodNip.getId());	
			}else{
				CorrelativosPersCodNip cfNew = new CorrelativosPersCodNip(new CorrelativosPersCodNipId(ciaopr,"PERSONAS",codigoPerCodNip));
				cfNew.setCorrelativoformato("0000");
				cfNew.setSecuenciacaracter("1");
				cfNew.setSecuenciaentero(1L);
				cfNew.setPrefijo(codigoPerCodNip);
				super.incluir(cfNew, null);
				return (CorrelativosPersCodNip) super.consultar(cfNew.getId());
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return null;
	}
	
	public ServicioCorrelativosPersonasCodNip() {
		// TODO Auto-generated constructor stub
	}
}
